﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace GUI
{
    public partial class FrmIndkøb : Form
    {
        Produktionssystem produktionssystem;

        public FrmIndkøb()
        {
            InitializeComponent();
            produktionssystem = new Produktionssystem();
            OpdaterCombobox();
            OpdaterlstMangelVarer();


            OpdaterMangelVarer.Enabled = true;
        }

        public void OpdaterCombobox()
        {
            cboRåvare.Items.Clear();

            for (int i = 0; i < produktionssystem.AntalRaaVareIVareCol(); i++)
            {
                cboRåvare.Items.Add(produktionssystem.FindRaavarenumre(i).ToString() + " - " + produktionssystem.FindRaaVareBetegnelse(i));
            }
        }



        private void btnOpretRåvare_Click(object sender, EventArgs e)
        {
            FrmOpret frmOpret = new FrmOpret(produktionssystem);     // skab vare-formular
            frmOpret.starttilstand();
            this.Hide();      // Skjul hovedformular
            frmOpret.ShowDialog();  // Gå til vare-formular (Modal)
            this.Show();      // Vis hovedformular
            OpdaterCombobox();
        }


        //Vælg RåvareNr
        private void cboRåvare_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void FrmIndkøb_Load(object sender, EventArgs e)
        {
        }

        private void OpdaterlstMangelVarer()
        {
            produktionssystem.findMangelvarer();

            for (int i = 0; i < produktionssystem.AntalMangelvareIVareCol(); i++)
            {
                ListViewItem vare = new ListViewItem(produktionssystem.FindMangelvarenumre(i).ToString());
                vare.SubItems.Add(produktionssystem.FindMangelvareBetegnelse(i));
                lstMangelvarer.Items.Add(vare);
            }
        }


        private void OpdaterMangelVarer_Tick(object sender, EventArgs e)
        {
            lstMangelvarer.Items.Clear();
            OpdaterlstMangelVarer();
        }

        private void btnIndkøbsliste_Click(object sender, EventArgs e)
        {
            string raavare = produktionssystem.FindRaavarenumre(cboRåvare.SelectedIndex).ToString();
            string beskr = produktionssystem.FindRaaVareBetegnelse(cboRåvare.SelectedIndex).ToString();
            bool res;

            //Try-Parse på KILO!
            int antalkg;
            res = int.TryParse(txtKilo.Text, out antalkg);
            if (!res)
            {
                MessageBox.Show("Indtast venligst kilo i heltal!");
                txtKilo.Focus();
                return;
            }

            //Try-Parse på PRIS!
            int pris;

            res = int.TryParse(txtPrisPrKg.Text, out pris);
            if (!res)
            {
                MessageBox.Show("Indtast venligst pris i heltal!");
                txtPrisPrKg.Focus();
                return;
            }
            int samletpris = Convert.ToInt32(txtKilo.Text) * Convert.ToInt32(txtPrisPrKg.Text);
  

            ListViewItem indkobvare = new ListViewItem(raavare);
            indkobvare.SubItems.Add(beskr);
            indkobvare.SubItems.Add(Convert.ToString(antalkg));
            indkobvare.SubItems.Add(Convert.ToString(pris));
            indkobvare.SubItems.Add(Convert.ToString(samletpris));
            
            lstIndkøbsliste.Items.Add(indkobvare);
        }


        // AØ : Opret ordre med ordrelinier 
        private void btnOpretOrdre_Click(object sender, EventArgs e)
        {
            DateTime leveringsdato;
            int indkoebsordrenr;
            int raavarenr;
            double antalKg;
            ListViewItem linie;

            leveringsdato = dtpLeveringsDato.Value;

            //Try-Parse på leveringsdato
            if (DateTime.Now > leveringsdato)
            {
                MessageBox.Show("Leveringsdatoen er ugyldig! Vælg venligst ny dato!");
                return;
            }

            // Opretter ordren først aht. constraint imellem ordrelinie og ordre i SQL
            if (!produktionssystem.OpretIndkoebsordre(leveringsdato))
            {
                MessageBox.Show("Ordren kunne desværre ikke oprettes");
            }

            indkoebsordrenr = produktionssystem.FindNytOrdrenr();

            // Opret ordrelinier ved gennemløb af listview
            for (int i = 0; i < lstIndkøbsliste.Items.Count; i++)
            {
                linie = lstIndkøbsliste.Items[i];
                bool type = true;
                raavarenr = Convert.ToInt32(linie.SubItems[0].Text);
                antalKg = Convert.ToDouble(linie.SubItems[2].Text);
                int varenr = 1;
                if (!produktionssystem.RegistrerOrdreLinie(indkoebsordrenr, varenr, raavarenr, antalKg, type))
                {                                        
                    MessageBox.Show("Der er fejl i en ordrelinie");
                }
            }

            lstIndkøbsliste.Items.Clear();
        }
    }
}
